package com.paradogs.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.paradogs.framework.common.entity.base.BaseEntity;

import java.util.Collections;

/**
 * @author: yumi
 * @date: 2023/11/14  10:00
 * @Description: DB 实体类生成器，待优化，代码生成等项目完善之后再做完整的代码生成 !!!
 */
public class DBEntityGenerator {
    public static void main(String[] args) {
        String test = System.getProperty("user.dir") + "/src/main/java";
        FastAutoGenerator.create("jdbc:mysql://120.26.15.12:3306/paradogs_game?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8",
                "root",
                "ningensama122")
                .globalConfig(builder -> {
                    builder.author("yumi") // 设置作者
                            .commentDate("yyyy-MM-dd")
                            .outputDir(System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/java"); // 设置输出目录为项目的src/main/java目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.paradogs.framework.common") // 设置父包名
                            .entity("entity")
                            .service("dao") // 输出包路径
                            .serviceImpl("dao.impl")
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/paradogs-framework/paradogs-framework-common/src/main/resources/mapper")); // 设置mapper.xml生成路径
                })
                .strategyConfig(builder -> {
                    builder
//                            .addInclude("table_name") // 设置需要生成的表名，如果要生成所有表，可以省略此行
                            .addTablePrefix("g_")

                            .entityBuilder()
                            .enableFileOverride() // // 覆盖已生成文件
                            .enableLombok()
                            .superClass(BaseEntity.class)
                            .enableTableFieldAnnotation() // 增加 @TableField
                            .idType(IdType.AUTO)

                            .serviceBuilder()
                            .enableFileOverride() // // 覆盖已生成文件
                            .formatServiceFileName("%sDao") // 去掉 'I' 前缀，Service 改为 Dao 名称
                            .formatServiceImplFileName("%sDaoImpl")
                            .build();
                })
                .templateConfig(builder -> {
                    builder
//                            .disable(TemplateType.SERVICE) // 禁用 Service 生成
//                            .disable(TemplateType.SERVICE_IMPL) // 禁用 ServiceImpl 生成
                            .disable(TemplateType.MAPPER)
                            .disable(TemplateType.CONTROLLER); // 禁用 Controller 生成

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
